package org.neg.curso;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.conexao.ConnectionHandler;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author mayara.oliveira2
 */
public class Curso {
    
    private String nome, cargaHoraria, preRequisitos, certificacao, descricao;
    private int maxAlunos;
    
    private ConnectionHandler ch = new ConnectionHandler();
    private Connection conn = null;
    private PreparedStatement stmt = null;
    private ResultSet rst = null;
    
    
    public boolean novoCurso(String nome, String cargaHoraria, String preRequisitos, String certificacao, int maxAlunos, String descricao){
        
        conn = ch.Connect();
        try {
            // Statement SQL
            stmt = conn.prepareStatement("INSERT INTO ADMINDB2.\"Curso\" (\"Nome\", \"CargaHoraria\", \"PreRequisitos\", \"Certificacao\", \"MaxAlunos\", \"Descricao\") VALUES(?,?,?,?,?,?)");
            
            stmt.setString(1, nome);
            stmt.setString(2, cargaHoraria);
            stmt.setString(3, preRequisitos);
            stmt.setString(4, certificacao);
            stmt.setInt(5, maxAlunos);
            stmt.setString(6, descricao);
            
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Criacao de statement falhou.");
            return false;
        }
        try {
            stmt.executeUpdate();
            System.out.println("Statement executado com sucesso.");
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Falha na execucao do statement.");
            return false;
        }
        return ch.Disconnect();
    }
    
    public ResultSet getCursos()
    {
        conn = ch.Connect();
        try {
            stmt = conn.prepareStatement("SELECT * FROM ADMINDB2.\"Curso\"", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            System.out.println("Statement criado com sucesso.");
        } catch (SQLException ex) {
            Logger.getLogger(Curso.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Criacao de statement falhou.");
        }
        try {
            rst = stmt.executeQuery();
            System.out.println("Query executada.");
            rst.last();
            System.out.println("Busca executada com sucesso. Encontrados " + rst.getRow() + " cursos.");
            rst.beforeFirst();
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Falha na execucao do statement.");
        }
        return rst;
    }
    
    public ResultSet getCursosDoInscrito(int idUsuario)
    {
        conn = ch.Connect();
        try {
            stmt = conn.prepareStatement("SELECT \"IdCurso\" FROM ADMINDB2.\"Curso\" WHERE \"IdCurso\" IN (SELECT \"IdCurso\" FROM ADMINDB2.\"Inscricao\" WHERE \"IdUsuario\" = ?)", ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            stmt.setInt(1, idUsuario);
            System.out.println("Passou o statement!");
            System.out.println("Statement criado com sucesso.");
        } catch (SQLException ex) {
            Logger.getLogger(Curso.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Criacao de statement falhou.");
        }
        try {
            rst = stmt.executeQuery();
            System.out.println("Query executada.");
            rst.last();
            System.out.println("Busca executada com sucesso. Encontrados " + rst.getRow() + " cursos.");
            rst.beforeFirst();
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Falha na execucao do statement.");
        }
        return rst;
    }
    
    public ResultSet getInscritosDoCurso(int idCurso)
    {
        conn = ch.Connect();
        try {
            stmt = conn.prepareStatement("SELECT * FROM ADMINDB2.\"Usuario\" WHERE \"IdUsuario\" IN (SELECT \"IdUsuario\" FROM ADMINDB2.\"Inscricao\" WHERE \"IdCurso\" = ?)", ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            stmt.setInt(1, idCurso);
            System.out.println("Passou o statement!");
            System.out.println("Statement criado com sucesso.");
        } catch (SQLException ex) {
            Logger.getLogger(Curso.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Criacao de statement falhou.");
        }
        try {
            rst = stmt.executeQuery();
            System.out.println("Query executada.");
            rst.last();
            System.out.println("Busca executada com sucesso. Encontrados " + rst.getRow() + " cursos.");
            rst.beforeFirst();
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Falha na execucao do statement.");
        }
        return rst;
    }
    
    public boolean Inscricao(int idCurso, int idUsuario)
    {
        conn = ch.Connect();
        try {
            // Statement SQL
            stmt = conn.prepareStatement("INSERT INTO ADMINDB2.\"Inscricao\" (\"IdCurso\", \"IdUsuario\", \"Data\") VALUES (?, ?, (SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1))");
            
            stmt.setInt(1, idCurso);
            stmt.setInt(2, idUsuario);
            
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Criacao de statement falhou.");
            return false;
        }
        try {
            stmt.executeUpdate();
            System.out.println("Statement executado com sucesso.");
        } catch (SQLException ex) {
            Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Falha na execucao do statement.");
            return false;
        }
        return ch.Disconnect();
    }

    public int getMaxAlunos() {
        return maxAlunos;
    }

    public void setMaxAlunos(int maxAlunos) {
        this.maxAlunos = maxAlunos;
    }

    
    public String getCargaHoraria() {
        return cargaHoraria;
    }

    public void setCargaHoraria(String cargaHoraria) {
        this.cargaHoraria = cargaHoraria;
    }

    public String getCertificacao() {
        return certificacao;
    }

    public void setCertificacao(String certificacao) {
        this.certificacao = certificacao;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }   

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getPreRequisitos() {
        return preRequisitos;
    }

    public void setPreRequisitos(String preRequisitos) {
        this.preRequisitos = preRequisitos;
    }
    
    
    }
    

